package br.com.lcp.agenda.managedbeans;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import br.com.lcp.agenda.entities.Contato;
import br.com.lcp.agenda.entities.Endereco;
import br.com.lcp.agenda.entities.Grupo;
import br.com.lcp.agenda.repository.Repository;

@ManagedBean(name = "contatoBean")
@SessionScoped
public class ContatoBean {

	private Repository<Grupo> grupoRepo = new Repository<Grupo>(Grupo.class);
	private Repository<Contato> contatoRepo = new Repository<Contato>(
			Contato.class);
	private Repository<Endereco> enderecoRepo = new Repository<Endereco>(
			Endereco.class);

	private String telefoneCelular;
	private String telefoneComercial;
	private String telefoneCasa;
	private Date dataNascimento;
	private String email;
	private String sobrenome;
	private String nome;
	private Endereco endereco;
	private Grupo grupo;
	
	private String logradouro;
	private Integer numero;	
	private String complemento;
	private String bairro;
	private String cidade;
	private String estado;
	private String pais;
	private ArrayList<SelectItem> grupos;

	private Integer grupoId;

	public String adicionaContato() {
		Contato contato = new Contato();
		contato.setDataNascimento(dataNascimento);
		contato.setEmail(email);
		contato.setGrupo(grupoRepo.buscaPorId(grupoId));
		contato.setNome(nome);
		contato.setSobrenome(sobrenome);
		contato.setTelefoneCasa(telefoneCasa);
		contato.setTelefoneCelular(telefoneCelular);
		contato.setTelefoneComercial(telefoneComercial);

		Endereco endereco = new Endereco();
		endereco.setBairro(bairro);
		endereco.setCidade(cidade);
		endereco.setComplemento(complemento);
		endereco.setLogradouro(logradouro);
		endereco.setEstado(estado);
		endereco.setNumero(numero);
		endereco.setPais(pais);
		enderecoRepo.adiciona(endereco);
		endereco = enderecoRepo.buscaPorId(endereco.getCodigo());
		contato.setEndereco(endereco);
		
		contatoRepo.adiciona(contato);

		return "contato-success";
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome
	 *            the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the sobrenome
	 */
	public String getSobrenome() {
		return sobrenome;
	}

	/**
	 * @param sobrenome
	 *            the sobrenome to set
	 */
	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email
	 *            the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the dataNascimento
	 */
	public Date getDataNascimento() {
		return dataNascimento;
	}

	/**
	 * @param dataNascimento
	 *            the dataNascimento to set
	 */
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	/**
	 * @return the telefoneCasa
	 */
	public String getTelefoneCasa() {
		return telefoneCasa;
	}

	/**
	 * @param telefoneCasa
	 *            the telefoneCasa to set
	 */
	public void setTelefoneCasa(String telefoneCasa) {
		this.telefoneCasa = telefoneCasa;
	}

	/**
	 * @return the telefoneComercial
	 */
	public String getTelefoneComercial() {
		return telefoneComercial;
	}

	/**
	 * @param telefoneComercial
	 *            the telefoneComercial to set
	 */
	public void setTelefoneComercial(String telefoneComercial) {
		this.telefoneComercial = telefoneComercial;
	}

	/**
	 * @return the telefoneCelular
	 */
	public String getTelefoneCelular() {
		return telefoneCelular;
	}

	/**
	 * @param telefoneCelular
	 *            the telefoneCelular to set
	 */
	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	/**
	 * @return the grupo
	 */
	public Grupo getGrupo() {
		return grupo;
	}

	/**
	 * @param grupo
	 *            the grupo to set
	 */
	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	/**
	 * @return the endereco
	 */
	public Endereco getEndereco() {
		return endereco;
	}

	/**
	 * @return the logradouro
	 */
	public String getLogradouro() {
		return logradouro;
	}

	/**
	 * @param logradouro the logradouro to set
	 */
	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	/**
	 * @return the numero
	 */
	public Integer getNumero() {
		return numero;
	}

	/**
	 * @param numero the numero to set
	 */
	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	/**
	 * @return the complemento
	 */
	public String getComplemento() {
		return complemento;
	}

	/**
	 * @param complemento the complemento to set
	 */
	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	/**
	 * @return the bairro
	 */
	public String getBairro() {
		return bairro;
	}

	/**
	 * @param bairro the bairro to set
	 */
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	/**
	 * @return the cidade
	 */
	public String getCidade() {
		return cidade;
	}

	/**
	 * @param cidade the cidade to set
	 */
	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	/**
	 * @return the estado
	 */
	public String getEstado() {
		return estado;
	}

	/**
	 * @param estado the estado to set
	 */
	public void setEstado(String estado) {
		this.estado = estado;
	}

	/**
	 * @return the pais
	 */
	public String getPais() {
		return pais;
	}

	/**
	 * @param pais the pais to set
	 */
	public void setPais(String pais) {
		this.pais = pais;
	}

	/**
	 * @param endereco
	 *            the endereco to set
	 */
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public void setGrupos(ArrayList<SelectItem> grupos) {
		this.grupos = grupos;
	}

	public ArrayList<SelectItem> getGrupos() {
		Collection<Grupo> gruposSalsixa = grupoRepo.buscaTodos();
		this.grupos = new ArrayList<SelectItem>();
		for (Grupo grupo : gruposSalsixa) {
			SelectItem item = new SelectItem();
			item.setValue(grupo.getCodigo());
			item.setLabel(grupo.getDescricao());
			this.grupos.add(item);
		}
		return this.grupos;
	}

	public void setGrupoId(Integer grupoId) {
		this.grupoId = grupoId;
	}

	public Integer getGrupoId() {
		return grupoId;
	}

}
